From: Florian Müllner Date: Tue, 11 Sep 2018 01:17:20 +0000 (+0200) Subject: util: Use (thread-safe) uselocale() X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~897^2^2~85 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=f4a64f77f2565eb5895e9245a67f96f4b3a226e0;p=gnome-shell.git util: Use (thread-safe) uselocale() Our helper method to translate a string according to the LC_TIME setting uses the no-thread-safe setlocale(). While that's not an issue in practice given that all JS code shares a single thread, I was pointed to a better alternative when adopting the same handling in gnome-desktop's wallclock[0]. [0] https://gitlab.gnome.org/GNOME/gnome-desktop/merge_requests/17 https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/292 --- diff --git a/src/shell-util.c b/src/shell-util.c index dfc13cd21..ed6593078 100644 --- a/src/shell-util.c +++ b/src/shell-util.c @@ -235,14 +235,21 @@ shell_util_translate_time_string (const char *str) const char *locale = g_getenv ("LC_TIME"); const char *res; char *sep; + locale_t old_loc; + locale_t loc = (locale_t) 0; if (locale) - setlocale (LC_MESSAGES, locale); + loc = newlocale (LC_MESSAGES_MASK, locale, (locale_t) 0); + + old_loc = uselocale (loc); sep = strchr (str, '\004'); res = g_dpgettext (NULL, str, sep ? sep - str + 1 : 0); - setlocale (LC_MESSAGES, ""); + uselocale (old_loc); + + if (loc != (locale_t) 0) + freelocale (loc); return res; }